package com.test.practice.java8.stream;

import java.util.LinkedList;
import java.util.List;

/**
 * Stream的适合场景
 * <p>
 * 集合操作超过两个步骤
 * 比如先filter再for each
 * 这时Stream显得优雅简洁，效率也高
 * 任务较重，注重效能，希望并发执行
 * 很容易的就隐式利用了多线程技术。非常好的使用时机。
 * 函数式编程的编码风格里
 * Stream的设计初衷之一
 * <p>
 * ComplexStream
 *
 * @author Jovi:2017年1月4日
 */
public class ComplexStream {
    public static void main(String[] args) {
        List<Integer> intList = new LinkedList<Integer>();
        for (int i = 1; i <= 1000000; i++) {
            intList.add(i);
        }

        TimeRecorder recorder = new TimeRecorder();

        recorder.start();
        intList.stream().forEach(i -> {
            i.intValue();
            i.intValue();
            i.toString();

            i.intValue();
            i.intValue();
            i.toString();
        });
        recorder.end();
        System.out.print("stream iterator:");
        System.out.println(recorder.getDuration());

        recorder.start();
        intList.parallelStream().forEach(i -> {
            i.intValue();
            i.intValue();
            i.toString();

            i.intValue();
            i.intValue();
            i.toString();
        });
        recorder.end();
        System.out.print("Parallel stream iterator:");
        System.out.println(recorder.getDuration());

        recorder.start();
        for (Integer i : intList) {
            i.intValue();
            i.intValue();
            i.toString();

            i.intValue();
            i.intValue();
            i.toString();
        }
        recorder.end();
        System.out.print("Normal iterator:");
        System.out.println(recorder.getDuration());
    }
}
